36장. NLB는 언제 쓰는가
이 장에서 말하고자 하는 것
ALB가 대부분의 HTTP 서비스를 책임진다.
그런데 어떤 상황에서는 ALB로 부족하다.
- HTTP가 아닌 프로토콜이 필요할 때
- 초저지연이 중요할 때
- 고정 IP가 필요할 때
이때 등장하는 것이
NLB (Network Load Balancer)
다.
ALB의 대체가 아니라 다른 자리에 쓰는 LB 다.
1. NLB가 다른 점
NLB는 L4(TCP/UDP)에서 동작한다.
- HTTP 헤더를 보지 않는다
- 경로 · 호스트 라우팅을 못 한다
- 그 대신 처리 지연이 매우 짧다 (100µs 수준)
- 초당 수백만 연결을 처리한다
- AZ마다 고정 IP를 가질 수 있다
2. NLB가 어울리는 상황
상황 1. 비-HTTP 프로토콜
- WebSocket 일부
- MQTT, AMQP
- 게임용 TCP/UDP 트래픽
- 일부 데이터베이스 프록시
상황 2. 고정 IP가 필요한 환경
방화벽 화이트리스트나
파트너사가 IP를 등록해야 하는 환경에서는
ALB의 가변 IP가 곤란하다.
NLB는 AZ마다 Elastic IP를 붙일 수 있다.
NLB AZ-A IP : 3.36.55.10
NLB AZ-B IP : 3.36.55.11
이 두 IP를 파트너에게 주면 끝난다.
상황 3. 초저지연이 중요한 서비스
거래소 · 실시간 시세 · 광고 입찰처럼
밀리초가 의미 있는 환경에서는 NLB를 쓴다.
상황 4. TLS 패스스루가 필요한 경우
암호화된 트래픽을 LB에서 안 풀고
그대로 뒤로 넘기고 싶을 때 NLB를 쓴다.
3. NLB가 어울리지 않는 상황
- 일반적인 HTTP / HTTPS API → ALB
- 경로 기반 라우팅이 필요한 경우 → ALB
- 인증서를 LB에서 종료해 내부는 HTTP로 받고 싶은 경우 → ALB
“L7 라우팅이 필요하면 ALB” 가 기준선이다
4. ALB 앞에 NLB를 두는 패턴
가끔 NLB를 ALB 앞에 두는 구조가 나온다.
사용자 → NLB(고정 IP) → ALB(L7 라우팅) → ECS
이유:
- 외부에는 고정 IP를 노출하고
- 내부 라우팅은 ALB의 L7 능력을 그대로 쓰고 싶을 때
특수 요건이 없으면 굳이 따라할 필요는 없다.
5. 우리 서비스에서
이 책에서 만드는 MSA의 기본 구조에는 NLB가 없다.
CloudFront → API Gateway → ALB → ECS → DB
이걸로 충분하다.
NLB는 “특수 요건이 생기면 이름을 떠올리는 도구” 로 알아두면 된다.
6. 직접 확인해보기 — CLI
# NLB 만들기
aws elbv2 create-load-balancer \
--name my-nlb \
--type network \
--subnets subnet-xxx subnet-yyy
ALB와 같은 elbv2 API를 쓰지만 --type network 가 다르다.
7. 코드로는 이렇게 생겼다 — Terraform
resource "aws_eip" "nlb_a" { domain = "vpc" }
resource "aws_eip" "nlb_b" { domain = "vpc" }
resource "aws_lb" "nlb" {
name = "my-nlb"
internal = false
load_balancer_type = "network"
subnet_mapping {
subnet_id = aws_subnet.public_a.id
allocation_id = aws_eip.nlb_a.id # 고정 IP
}
subnet_mapping {
subnet_id = aws_subnet.public_b.id
allocation_id = aws_eip.nlb_b.id
}
}
subnet_mapping 으로 AZ마다 Elastic IP를 지정해
고정 IP를 만들 수 있다.
8. 이렇게 쓰면 망한다 — 안티패턴
안티패턴 1. HTTP 서비스에 NLB를 기본으로 쓴다
경로 라우팅 · 호스트 라우팅 · 헤더 검사가 다 막힌다.
결국 애플리케이션에서 분기 코드를 짜게 된다.
HTTP라면 거의 항상 ALB
안티패턴 2. NLB에 보안 그룹이 없다고 가정한다
NLB에도 2023년부터 보안 그룹을 붙일 수 있다.
다만 ALB와 동작이 미묘하게 다르다.
NLB 뒷단 보안 그룹 규칙은 꼭 다시 점검한다
안티패턴 3. NLB로 TLS 패스스루를 한 뒤 뒷단에서 또 패스스루 한다
NLB(TLS 패스) → EC2(TLS 패스) → 어디서 종료할지 모름
TLS는 어딘가 한 곳에서 반드시 종료된다
패스스루의 끝을 명확히 설계해야 한다
9. 한 줄로 정리
NLB는 L4의 빠르고 단순한 LB이며,
HTTP가 아니거나 고정 IP가 필요할 때 등장한다
10. 이 장의 핵심 정리
- NLB는 L4에서 동작해 ALB와 다른 자리에 쓴다.
- HTTP / HTTPS API에는 거의 항상 ALB가 맞다.
- NLB는 고정 IP · 초저지연 · TLS 패스스루 · 비-HTTP 프로토콜이 필요할 때 고려한다.
- 우리 MSA 구조의 기본형에는 NLB가 없다.
- NLB는 도구 이름으로 기억해 두고, 요건이 생기면 그때 깊이 들여다본다.